package com.rgc.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.PreparedStatementCreator;
import org.springframework.jdbc.core.support.JdbcDaoSupport;

import com.rgc.domain.Equipo;
import com.rgc.domain.EventoJuego;
import com.rgc.domain.Juego;
import com.rgc.domain.Participante;
import com.rgc.domain.Ranking;
import com.rgc.domain.Usuario;

public class ParticipanteDaoImpl extends JdbcDaoSupport implements ParticipanteDao {





	public List<Participante> listParticipante(String[] campo,String[] valor) {
		try {
			String sql = " SELECT * from participante  ";
			String conector=" where ";
			for (int i=0;i<campo.length;i++)  {
				 sql+=conector+""+campo[i]+"='"+valor[i]+"'";
				 conector=" and ";
						 
		    }
			sql+="   "+" order by idparticipante desc ";

			List<Participante> participantes =  getJdbcTemplate().query(
        			sql, new BeanPropertyRowMapper<Participante>(Participante.class));
         
			

        	return participantes;
        	
    } catch (Exception e) {
            System.out.println(e.getMessage());
            e.printStackTrace();
    }
	return new ArrayList<Participante>();
	}

	
	public List<Participante> listParticipanteOrden(String idevento_juego) {
		try {
			String sql = " SELECT * from participante  "
			+" where idevento_juego='"+idevento_juego+"' ";
	
			sql+="   "+" order by puntaje desc ";

			List<Participante> participantes =  getJdbcTemplate().query(
        			sql, new BeanPropertyRowMapper<Participante>(Participante.class));
         
			

        	return participantes;
        	
    } catch (Exception e) {
            System.out.println(e.getMessage());
            e.printStackTrace();
    }
	return new ArrayList<Participante>();
	}
	
	public List<Participante> listParticipante(String idevento_juego, int tipo) {
		
		return listParticipante(new String[]{"idevento_juego","estado"},new String[]{idevento_juego,tipo+""});
	}

	public boolean getParticipante(String idevento_juego, String idusuario,int tipo) {
		List<Participante> participantes= listParticipante(new String[]{"idevento_juego","idusuario","estado"},new String[]{idevento_juego,idusuario,tipo+""});
		if(participantes.size()>0)
			return true;
		return false;
	}

	public boolean addParticipante(Usuario usuario, EventoJuego eventojuego) {
		return addParticipanteBase(usuario.getIdusuario(),"0",eventojuego.getIdevento_juego());
	}

	public boolean addParticipante(Equipo equipo, EventoJuego eventojuego) {
		return addParticipanteBase("0",equipo.getIdequipo(),eventojuego.getIdevento_juego());
	}

	public boolean delParticipante(Usuario usuario, EventoJuego eventojuego) {
		try{	
			String sql="DELETE from participante where idusuario='"+usuario.getIdusuario()+"' and idevento_juego='"+eventojuego.getIdevento_juego()+"' ";			
			getJdbcTemplate().update(sql);
			System.out.println("DELETE:"+sql);
			return true;
		}catch(Exception e){
			e.printStackTrace();
		}
		return false;
	}
	public boolean delParticipante(Equipo equipo, EventoJuego eventojuego) {
		try{	
			String sql="DELETE from participante where idequipo='"+equipo.getIdequipo()+"' and idevento_juego='"+eventojuego.getIdevento_juego()+"' ";			
			System.out.println("DELETE:"+sql);
			getJdbcTemplate().update(sql);
			return true;
		}catch(Exception e){
			e.printStackTrace();
		}
		return false;
	}



	public boolean addParticipanteBase(final String idusuario, final String idequipo, final String idevento_juego) {
		try {
			
			final String sql = "INSERT INTO participante(idusuario,idequipo,idevento_juego) values(?,?,?)";
			getJdbcTemplate().update(
					new PreparedStatementCreator()
			        {
			            public PreparedStatement createPreparedStatement(Connection conn) throws SQLException
			            {
			                PreparedStatement preparedStatement = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
			                preparedStatement.setString(1,idusuario);
			                preparedStatement.setString(2,idequipo);
			                preparedStatement.setString(3,idevento_juego);
			                return preparedStatement;
			            }
			        }	
					);			
			   
                
                return true;
         
        } catch (Exception e) {
                System.out.println(e.getMessage());
                e.printStackTrace();
        }
		return false;
	}

	public boolean addPuntosParticipante(List<Participante> participante) {
		try{
			for(Participante p:participante){
				String sql="UPDATE participante set puntaje='"+p.getPuntaje()+"' where idparticipante='"+p.getIdparticipante()+"'  ";			
				System.out.println("DELETE:"+sql);
				getJdbcTemplate().update(sql);
			}
			return true;
		}catch(Exception e){
			e.printStackTrace();
		}
		return false;
	}

	
		


}
